#ifndef IDEVICE_H_
#define IDEVICE_H_

#include <iostream>
#include <memory>
#include "zlbase/datalink/IBaseDatalink.h"

namespace zl
{
namespace zlbase
{

/// \brief 设备基类
/// \note 所有设备都继承自该接口
class IDevice
{
public:
    IDevice()
    {
        static int32_t sid = 0;
        id_ = ++sid;
    }
    virtual ~IDevice() = default;

    /// \brief 获取设备ID 每个设备对象都有一个唯一的设备ID，用于标识该设备
    /// \return 设备的唯一ID
    inline int32_t ID() { return id_; }

    /// \brief 获取设备版本号
    ///
    /// 获取硬件设备的版本号，应在具体的设备类型中实现，返回真实的版本号
    /// 该版本号可以为固件版本号或者在类中定义的版本号
    /// \return 设备的版本号
    virtual std::string Version() = 0;

    /// \brief 连接到设备
    virtual int32_t Connect() = 0;

    /// \brief 断开连接
    virtual int32_t Disconnect() = 0;

private:
    int32_t id_; ///< 设备ID
};

} // namespace zlbase
} // namespace zl

#endif // IDEVICE_H_